<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>Hello php</h1>

<?php

/**
 * PHP 变量名称对大小写敏感
 * 在 PHP 中，所有用户定义的函数、类和关键词（例如 if、else、echo 等等）都对大小写不敏感。
 */
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";

// 只有第一条语句会显示 $color 变量的值（这是因为 $color、$COLOR 以及 $coLOR 被视作三个不同的变量）：
$color="red";
echo "My car is " . $color . "<br>";
// echo "My house is " . $COLOR . "<br>";
// echo "My boat is " . $coLOR . "<br>";

# global 关键词用于访问函数内的全局变量
$x=5;
$y=10;

// 函数名对大小写不敏感
function plus() {
    global $x,$y;
    $y=$x+$y;
}

plus();
echo $y ,' <br>'; // 输出 15

// PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量，下标存有变量名。
function plus2() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}

plus2();
echo $y ,' <br>'; // 输出 20


// static
function testStatic() {
    // 仍然是函数的局部变量
    static $count=0;
    echo $count,' <br>';
    $count++;
}

testStatic();
testStatic();
testStatic();

// echo 和 print
echo "<h2>PHP is fun!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";
echo "This", " string", " was", " made", " with multiple parameters.<br>";

$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");

echo $txt1;
echo "<br>";
echo "Study PHP at $txt2<br> ";
echo "My car is a {$cars[0]}";

print "<h3>PHP is fun!</h3>";
print "Hello world!<br>";
print "I'm about to learn PHP!";

print "<br>";
print $txt1;
print "<br>";
print "Study PHP at $txt2 <br>";
print "My car is a {$cars[1]}";
echo '<br>';


/**
 * 数据类型 var_dump() 会返回变量的数据类型和值
 */

// 字符串 string
$x = "Hello world!";
var_dump($x);

//  整数 int
$x = 5985;
var_dump($x);

$x = -345; // 负数
var_dump($x);

$x = 0x8C; // 十六进制数
var_dump($x);

$x = 047; // 八进制数
var_dump($x);

// 浮点数 float
$x = 10.365;
var_dump($x);

$x = 2.4e3;
var_dump($x);

$x = 8E-5;
var_dump($x);

// 逻辑 boolean
$x=true;
$y=false;
var_dump($x);
var_dump($y);

// 数组 array
$cars=array("Volvo","BMW","SAAB");
var_dump($cars);

// 对象
class Car
{
    var $color;
    function Car($color="green") {
        $this->color = $color;
    }

    function what_color() {
        return $this->color;
    }
}

// null 值
$x=null;
var_dump($x);

/**
 * 字符串函数
*/
$hello = "Hello world!";
// strlen() 函数返回字符串的长度
echo $hello, strlen($hello);
echo '<br>';
// strpos() 函数用于检索字符串内指定的字符或文本。
echo $hello, strpos($hello,"world");    // 6    字符串中首字符的位置是 0
echo '<br>';

/*
 * 常量
 */
// 常量的名称, 常量的值, 常量名是否对大小写敏感(default is false 敏感)
define("GREETING", "Welcome to W3School.com.cn!", true);
echo GREETING;
echo '<br>';

/*
 * 运算符
 */

// 算数运算符
$x=10;
$y=6;
echo ($x + $y); // 输出 16
echo '<br>';
echo ($x - $y); // 输出 4
echo '<br>';
echo ($x * $y); // 输出 60
echo '<br>';
echo ($x / $y); // 输出 1.6666666666667
echo '<br>';
echo ($x % $y); // 输出 4
echo '<br>';

//  赋值运算符
$x=10;
echo $x; // 输出 10
echo '<br>';
$y=20;
$y += 100;
echo $y; // 输出 120
echo '<br>';
$z=50;
$z -= 25;
echo $z; // 输出 25
echo '<br>';
$i=5;
$i *= 6;
echo $i; // 输出 30
echo '<br>';
$j=10;
$j /= 5;
echo $j; // 输出 2
echo '<br>';
$k=15;
$k %= 4;
echo $k; // 输出 3
echo '<br>';

// 字符串运算符
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出 Hello world!
echo '<br>';

$x="Hello";
$x .= " world!";
echo $x; // 输出 Hello world!
echo '<br>';

// 递增/递减运算符
$x=10;
echo ++$x; // 输出 11
echo '<br>';

$y=10;
echo $y++; // 输出 10
echo '<br>';

$z=5;
echo --$z; // 输出 4
echo '<br>';

$i=5;
echo $i--; // 输出 5
echo '<br>';

// 比较运算符    （数字或字符串）
$x=100;
$y="100";

var_dump($x == $y);     // true
var_dump($x === $y);    // false
var_dump($x != $y);     // false
var_dump($x !== $y);    // true

$a=50;
$b=90;

var_dump($a > $b);      // false
var_dump($a < $b);      // true

/*

PHP 逻辑运算符
运算符	名称	 例子	         结果
and	    与	     $x and $y	     如果 $x 和 $y 都为 true，则返回 true。
or	    或	     $x or $y	     如果 $x 和 $y 至少有一个为 true，则返回 true。
xor	    异或	 $x xor $y	      如果 $x 和 $y 有且仅有一个为 true，则返回 true。
&&	    与	     $x && $y	     如果 $x 和 $y 都为 true，则返回 true。
||	    或	     $x || $y	     如果 $x 和 $y 至少有一个为 true，则返回 true。
!	    非	     !$x	         如果 $x 不为 true，则返回 true。

 */


// 数组运算符
echo '数组运算符:';
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y;           // $x 与 $y 的联合
var_dump($z);
var_dump($x == $y);     // false
var_dump($x === $y);    // false
var_dump($x != $y);     // true
var_dump($x <> $y);     // true
var_dump($x !== $y);    // true

// if...else 语句
$t=date("H");
var_dump($t);
if ($t<'20') {
    echo "Have a good day!";
} else {
    echo "Have a good night!";
}
echo '<br>';

if ($t<"10") {
    echo "Have a good morning!";
} elseif ($t<"20") {
    echo "Have a good day!";
} else {
    echo "Have a good night!";
}
echo '<br>';

// switch
$x = 4;
switch ($x)
{
    case 1:
        echo "Number 1";
        break;
    case 2:
        echo "Number 2";
        break;
    case 3:
        echo "Number 3";
        break;
    default:
        echo "No number between 1 and 3";
}
echo '<br>';

// while
$x=1;
while($x<=5) {
    echo "这个数字是:" , $x++ ," <br>";
}

$x=6;

do {
    echo "这个数字是：$x <br>";
    $x++;
} while ($x<=5);

// for
for ($x=0; $x<=10; $x++) {
    echo "数字是：$x <br>";
}

// foreach  循环只适用于数组，并用于遍历数组中的每个键/值对。
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
    echo "$value <br>";
}

// 函数
function familyName($fname,$year) {
    echo "$fname Zhang. Born in $year <br>";
}

familyName("Li","1975");
familyName("Hong","1978");
familyName("Tao","1983");

// 默认参数值
function setHeight($minheight=50) {
    echo "The height is : $minheight <br>";
}

setHeight(350);
setHeight(); // 将使用默认值 50

function sum($x,$y) {
    $z=$x+$y;
    return $z;
}

echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4) . "<br>";


/*
 * 数组
 *  sort()      - 以升序对数组排序
                  用于关联数组时会直接把key替换为0,1,2,3...
    rsort()     - 以降序对数组排序
    asort()     - 根据值，以升序对关联数组进行排序
    ksort()     - 根据键，以升序对关联数组进行排序
    arsort()    - 根据值，以降序对关联数组进行排序
    krsort()    - 根据键，以降序对关联数组进行排序
 */
$cars=array("Volvo","BMW","SAAB");
echo "count ", count($cars),"<br>";
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".<br>";
$cars[3] = "Chery";
echo "$cars[3] <br>";

// sort
sort($cars);
echo 'after sort:';
foreach($cars as $value) {
    echo  $value . ' ';
}
echo "<br>";

// rsort
rsort($cars);
echo 'after rsort:';
foreach($cars as $value) {
    echo  $value . ' ';
}
echo "<br>";

// 关联数组
$age=array("Peter"=>"35","Ben"=>"21","Joe"=>"43");
$age['Lee']="28";
echo "Peter is " . $age['Peter'] . " years old. <br>";
echo "Lee is " . $age['Lee'] . " years old. <br>";

foreach($age as $key=>$x_value) {
    echo $key . ':' . $x_value . ",";
}
echo "<br>";

// asort
asort($age);
echo 'after asort:';
foreach($age as $key=>$x_value) {
    echo $key . ':' . $x_value . ",";
}
echo "<br>";

// ksort
ksort($age);
echo 'after ksort:';
foreach($age as $key=>$x_value) {
    echo $key . ':' . $x_value . ",";
}
echo "<br>";


// 多维数组
$cars = array
(
    array("Volvo",22,18),
    array("BMW",15,13),
    array("Saab",5,2),
    array("Land Rover",17,15)
);

echo $cars[0][0].": 库存：".$cars[0][1].", 销量：".$cars[0][2].".<br>";
echo $cars[1][0].": 库存：".$cars[1][1].", 销量：".$cars[1][2].".<br>";
echo $cars[2][0].": 库存：".$cars[2][1].", 销量：".$cars[2][2].".<br>";
echo $cars[3][0].": 库存：".$cars[3][1].", 销量：".$cars[3][2].".<br>";


for ($row = 0; $row < 4; $row++) {
    echo "<p><b>Row number $row</b></p>";
    echo "<ul>";
    for ($col = 0; $col < 3; $col++) {
        echo "<li>".$cars[$row][$col]."</li>";
    }
    echo "</ul>";
}

?>

</body>
</html>